from x_com import source_api
from datetime import datetime, timedelta


def market_to_str(market: source_api.Market) -> str:
    if market == source_api.Market.SZSE:
        return "SZSE"
    elif market == source_api.Market.SSE:
        return "SSE"
    elif market == source_api.Market.SHFE:
        return "SHFE"
    elif market == source_api.Market.DCE:
        return "DCE"
    elif market == source_api.Market.CZCE:
        return "CZCE"
    elif market == source_api.Market.CFFEX:
        return "CFFEX"
    elif market == source_api.Market.INE:
        return "INE"
    elif market == source_api.Market.GFEX:
        return "GFEX"
    else:
        return ""

def str_to_market(market: str) -> source_api.Market:
    if market == "SZSE":
        return source_api.Market.SZSE
    elif market == "SSE":
        return source_api.Market.SSE
    elif market == "SHFE":
        return source_api.Market.SHFE
    elif market == "DCE":
        return source_api.Market.DCE
    elif market == "CZCE":
        return source_api.Market.CZCE
    elif market == "CFFEX":
        return source_api.Market.CFFEX
    elif market == "INE":
        return source_api.Market.INE
    elif market == "GFEX":
        return source_api.Market.GFEX
    else:
        return source_api.Market.NOMARKET
    
def convert_to_datetime(num_str: str) -> float:
    """
    将类似 '20241105093003292' 格式的字符串转换为时间戳。
    参数:
        num_str (str): 输入的时间字符串（例如 '20241105093003292'）。
    返回:
        float: 对应的时间戳。
    """
    # 提取日期和时间部分
    date_str = num_str[:8]  # 20241105 (年-月-日)
    time_str = num_str[8:-1]  # 0930032 (时:分:秒.毫秒)

    # 构造 datetime 对象
    date_time_str = f"{date_str} {time_str[:-3]}.{time_str[-3:]}"  # 转换为标准时间格式
    dt = datetime.strptime(date_time_str, "%Y%m%d %H%M%S.%f")

    # 获取时间戳
    return dt



def tick_time_to_ymdhm(tick_time):
    """
    将类似 '20241105093003292' 格式的字符串转换为时间戳。
    参数:
        num_str (str): 输入的时间字符串（例如 '202411050931'）。
    返回:
        float: 对应的时间戳。
    """

    tick_datetime = convert_to_datetime(tick_time)
    # 加一分钟，当前的tick，合成到下一分钟
    new_time = tick_datetime + timedelta(minutes=1)
    return new_time.year * 1_00_00_00_00_00_000 + new_time.month * 1_00_00_00_00_000 + new_time.day * 1_00_00_00_000 + new_time.hour * 1_00_00_000 + new_time.minute * 1_00_000


# 返回 1500、 930
def tick_time_to_hm(tick_time):
    """
    将类似 '20241105093003292' 格式的字符串转换为时间戳。
    参数:
        num_str (str): 输入的时间字符串（例如 '202411050931'）。
    返回:
        float: 对应的时间戳。
    """

    tick_datetime = convert_to_datetime(tick_time)
    # 加一分钟，当前的tick，合成到下一分钟
    new_time = tick_datetime + timedelta(minutes=1)
    return new_time.hour * 1_00 + new_time.minute

# 20241105
def tick_time_to_ymd(tick_time):
    """
    将类似 '20241105093003292' 格式的字符串转换为时间戳。
    参数:
        num_str (str): 输入的时间字符串（例如 '202411050931'）。
    返回:
        float: 对应的时间戳。
    """

    tick_datetime = convert_to_datetime(tick_time)
    # 加一分钟，当前的tick，合成到下一分钟
    new_time = tick_datetime + timedelta(minutes=1)
    return new_time.year * 1_00_00 + new_time.month * 1_00+ new_time.day